home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 2
/
SPACE - Library 2 - Volume 1.iso
/
apps
/
93
/
applic
/
svbndpgm.bas
< prev
next >
Wrap
BASIC Source File
|
1987-01-15
|
24KB
|
515 lines
10 '*************************************************************************
20 '* SAVINGS BOND PROGRAM *
30 '* WRITTEN 12-10-86 BY DICK STUBBS *
40 '* 400 NO. STUBBS BAY ROAD *
50 '* LONG LAKE, MINN. 55356 *
60 '*************************************************************************
70 '
80 '*************************************************************************
90 '* THIS PROGRAM IS A MENU DRIVEN PROGRAM THAT ALLOWS YOU TO KEEP TRACK *
100 '* OF YOUR INVESTMENT IN U.S. SAVINGS BONDS BY SELECTING AMONG VARIOUS *
110 '* OPTIONS OFFERED TO YOU ON THE MAIN MENU. ALL SELECTIONS ARE SELF- *
120 '* EXPLANATORY, AND PROMPT YOU FOR THE REQUIRED INPUT. *
130 '*************************************************************************
140 '
150 '*************************************************************************
160 '* VARIABLES USED: *
170 '* AGAIN$=PROGRAM CONTROL VARIABLE, AMOUNT$=AMOUNT ARRAY *
180 '* A$=AMOUNT STRING, BD$=BOND DATE *
190 '* BPM$=BOND PRINT MASK, BVPM$=BOND VALUE PRINT MASK *
200 '* CAT$=CATEGORY NAME, CATNAME$=TITLE OF CATEGORY *
210 '* CD$=CORRECTED DATA, CONTINUE$=CONTROL VARIABLE *
220 '* COST$=ORIGINAL COST ARRAY, C$=COST STRING *
230 '* D=COUNTER, D$=DATE STRING *
240 '* DATE$=DATE ARRAY, DI=COUNTER *
250 '* EE=NUMBER OF EE BONDS, EN=NUMBER OF E BONDS *
260 '* EV=VALUE OF EE BONDS, FILENAME$=FILENAME *
270 '* FLAG=CONTROL VARIABLE, FV=FACE VALUE *
280 '* I$=INPUT STRING, IN$=INPUT ARRAY *
290 '* JD=JULIAN DATE, LN=LINE NUMBER *
300 '* LR=LAST RECORD, M$=MATURE DATE STRING *
310 '* MATURE$=MATURE DATE ARRAY, MB=NUMBER OF MATURE BONDS *
320 '* MN$=MONTH NAME, MN=MONTH COUNTER *
330 '* MO$=MONTH STRING, MONTH=MONTH NUMBER *
340 '* MV=MATURE VALUE, MY$=CURRENT MONTH,YEAR *
350 '* N$=BOND NUMBER, NUMBER$=BOND NUMBER ARRAY *
360 '* OK$=CONTROL VARIABLE, OP$=OPTION SELECTION STRING *
370 '* OP=OPTION SELECTION VALUE, PAGENO=PAGE NUMBER *
380 '* R=RECORD NUMBER, RN=RECORD NUMBER *
390 '* SD$=SEARCH DATE, T$=BOND TYPE *
400 '* TYPE$=BOND TYPE ARRAY, TA=TOTAL AMOUNT *
410 '* V=VALUE OF E BONDS *
420 '*************************************************************************
430 '
440 '*************************************************************************
450 '* INITIALIZE VARIABLES, CHOOSE INPUT FILE & DEFINE ARRAYS *
460 '*************************************************************************
470 '
480 CLEAR
490 FULLW 2:WIDTH 80:WIDTH LPRINT 80
500 OPTION BASE 1
510 DIM DATE$(100),TYPE$(100),COST$(100),NUMBER$(100),AMOUNT$(100)
520 DIM MATURE$(100),IN$(100)
530 DATA JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC
540 BPM$="####"
550 BVPM$="$$##,###.##"
560 FLAG=1
570 WHILE FLAG=1
580 CLEARW 2:GOTOXY 25,1:PRINT "SAVINGS BOND PROGRAM":GOTOXY 6,5
590 INPUT "WHAT IS THE NAME OF THE FILE YOU'LL BE WORKING WITH";FILENAME$
600 GOTOXY 23,10:PRINT "FILE NAME IS '";FILENAME$;"'"
610 GOTOXY 11,16
620 LINE INPUT "IF CORRECT INPUT 'Y' <RETURN>, ELSE 'N' <RETURN> ";CORRECT$
630 IF CORRECT$="Y" THEN FLAG=0
640 WEND
650 '
660 '*************************************************************************
670 '* DISPLAY MENU & CHOOSE OPTION *
680 '*************************************************************************
690 '
700 CLEARW 2:GOTOXY 15,1:PRINT "DO YOU WANT TO --":PRINT
710 PRINT TAB(25);"(1) CREATE A NEW FILE"
720 PRINT TAB(25);"(2) ADD TO AN EXISTING FILE"
730 PRINT TAB(25);"(3) LIST/CORRECT INDIVIDUAL BONDS"
740 PRINT TAB(25);"(4) DELETE ITEMS FROM FILE"
750 PRINT TAB(25);"(5) LIST ENTIRE FILE"
760 PRINT TAB(25);"(6) LIST BOND SUMMARY"
770 PRINT TAB(25);"(7) PRINT ENTIRE FILE"
780 PRINT TAB(25);"(8) PRINT BOND SUMMARY"
790 PRINT TAB(25);"(9) PRINT MATURE BOND LIST"
800 PRINT TAB(25);"(10) USE ANOTHER FILE"
810 PRINT TAB(25);"(11) EXIT PROGRAM
820 GOTOXY 24,15:LINE INPUT "OPTION DESIRED? ";OP$:OP=VAL(OP$)
830 IF OP<1 OR OP>11 THEN 820
840 ON OP GOTO 870,1010,1230,1830,2220,2540,2730,3080,3360,3770,3830
850 '
860 '*************************************************************************
870 '* CREATE A NEW FILE ROUTINE *
880 '*************************************************************************
890 '
900 GOSUB INPUTDATA
910 CLEARW 2:GOTOXY 23,7:PRINT "NOW RECORDING FILE '";FILENAME$;"'"
920 OPEN "R",#1,FILENAME$,47
930 FIELD #1,47 AS IN$
940 FOR R=1 TO X-1
950 LSET IN$=IN$(R)
960 PUT #1,R
970 NEXT R
980 CLOSE #1
990 GOTO 700
1000 '
1010 '*************************************************************************
1020 '* ROUTINE FOR ADDING DATA *
1030 '*************************************************************************
1040 '
1050 CLEARW 2:GOTOXY 26,7:PRINT "CHECKING LAST RECORD ON FILE"
1060 OPEN "R",#1,FILENAME$,47
1070 FIELD #1,47 AS IN$
1080 GET #1,LOF(1)
1090 LR=LOF(1)
1100 CLEARW 2:GOTOXY 5,8
1110 PRINT "LAST DATE ON FILE IS ";LEFT$(IN$,10);" AND LISTS BOND NUMBER ";
1120 PRINT MID$(IN$,18,15):GOTOXY 25,15
1130 PRINT "PRESS <RETURN> TO CONTINUE ";:LINE INPUT CONTINUE$
1140 GOSUB INPUTDATA
1150 CLEARW 2:GOTOXY 31,8:PRINT "NOW UPDATING FILE"
1160 FOR R=1 TO X-1
1170 LSET IN$=IN$(R)
1180 PUT #1,R+LR
1190 NEXT R
1200 CLOSE #1
1210 GOTO 700
1220 '
1230 '*************************************************************************
1240 '* ROUTINE FOR MAKING CORRECTIONS *
1250 '*************************************************************************
1260 '
1270 OPEN "R",#1,FILENAME$,47
1280 FIELD #1,10 AS D$,2 AS T$,5 AS C$,15 AS N$,5 AS A$,10 AS M$
1290 CLEARW 2:GOTOXY 23,1:PRINT "BOND DATA LIST/CORRECTION ROUTINE":PRINT
1300 PRINT TAB(7);"DATE OF BOND DATA TO BE LISTED (ENTER AS 'MONTH,YEAR') ";
1310 LINE INPUT BD$:SD$=LEFT$(BD$+" ",10)
1320 CLEARW 2:GOTOXY 31,8:PRINT "NOW SEARCHING FILE"
1330 FOR R=1 TO LOF(1)
1340 GET #1,R
1350 IF D$=SD$ THEN 1430
1360 NEXT R
1370 CLEARW 2:GOTOXY 20,1:PRINT "'";BD$;"' IS NOT ON FILE '";FILENAME$;"
1380 PRINT TAB(18);"DO YOU WANT TO TRY ANOTHER DATE (Y OR N)? ";
1390 LINE INPUT AGAIN$
1400 IF AGAIN$="Y" THEN 1300
1410 IF AGAIN$="N" THEN 1800
1420 IF AGAIN$<>"Y" OR AGAIN$<>"N" THEN 1370
1430 CLEARW 2:GOTOXY 10,1:PRINT "BOND DATA FOR FILE '";FILENAME$;"'";
1440 PRINT TAB(43);"RECORD NUMBER";R
1450 PRINT TAB(4);"ISSUE DATE";TAB(18);"TYPE";TAB(26);"$COST";TAB(39);"NUMBER";
1460 PRINT TAB(53);"$AMOUNT";TAB(64);"MATURES ON"
1470 PRINT TAB(4);"__________";TAB(18);"____";TAB(26);"_____";TAB(39);"______";
1480 PRINT TAB(53);"_______";TAB(64);"__________"
1490 PRINT
1500 PRINT TAB(4);D$;TAB(19);T$;TAB(26);C$;TAB(36);N$;TAB(55);A$;TAB(64);M$
1510 PRINT:PRINT TAB(18);"ENTER THE NAME OF THE CATEGORY TO BE CHANGED"
1520 PRINT TAB(13);"('NONE' IF NO CHANGES ARE TO BE MADE), A PLUS SIGN (+)";
1530 PRINT TAB(12);"TO DISPLAY THE NEXT RECORD, A MINUS SIGN (-) TO DISPLAY"
1540 PRINT TAB(15);"THE PREVIOUS RECORD, OR AN 'A' TO SHOW ANOTHER BOND."
1550 PRINT TAB(16);"CATEGORY NAMES ARE: 'D' FOR ISSUE DATE, 'T' FOR"
1560 PRINT TAB(14);"BOND TYPE, 'C' FOR ORIGINAL COST, 'N' FOR BOND NUMBER,"
1570 PRINT TAB(14);"'V' FOR FACE VALUE (AMOUNT), AND 'M' FOR MATURE DATE."
1580 PRINT TAB(20);"ENTER CATEGORY (OR FUNCTION) DESIRED ";:LINE INPUT CAT$
1590 IF CAT$="NONE" OR CAT$="A" OR CAT$="+" OR CAT$="-" OR CAT$="D" THEN 1620
1600 IF CAT$="T" OR CAT$="C" OR CAT$="N" OR CAT$="V" OR CAT$="M" THEN 1620
1610 PRINT TAB(22);"'";CAT$;"' IS INVALID. PLEASE ENTER AGAIN":GOTO 1580
1620 IF CAT$="NONE" THEN 1800
1630 IF CAT$="+" THEN R=R+1:GET #1,R:GOTO 1430
1640 IF CAT$="-" THEN R=R-1:GET #1,R:GOTO 1430
1650 IF CAT$="A" THEN 1290
1660 IF CAT$="D" THEN CATNAME$="ISSUE DATE"
1670 IF CAT$="T" THEN CATNAME$="BOND TYPE"
1680 IF CAT$="C" THEN CATNAME$="ORIGINAL COST"
1690 IF CAT$="N" THEN CATNAME$="BOND NUMBER"
1700 IF CAT$="V" THEN CATNAME$="FACE VALUE (AMOUNT)"
1710 IF CAT$="M" THEN CATNAME$="MATURE DATE"
1720 PRINT:PRINT TAB(20);"WHAT IS THE CORRECT ";CATNAME$;"? ";:LINE INPUT CD$
1730 IF CAT$="D" THEN LSET D$=LEFT$(CD$+" ",10)
1740 IF CAT$="T" THEN LSET T$=LEFT$(CD$+" ",2)
1750 IF CAT$="C" THEN LSET C$=LEFT$(CD$+" ",5)
1760 IF CAT$="N" THEN LSET N$=LEFT$(CD$+" ",15)
1770 IF CAT$="V" THEN LSET A$=LEFT$(CD$+" ",5)
1780 IF CAT$="M" THEN RSET M$=RIGHT$(" "+CD$,10)
1790 PUT #1,R:GOTO 1430
1800 CLOSE #1
1810 GOTO 700
1820 '
1830 '*************************************************************************
1840 '* ROUTINE FOR DELETING ITEMS *
1850 '*************************************************************************
1860 '
1870 CLEARW 2:GOTOXY 13,1:PRINT "ENTER DATE(S) TO BE DELETED. ";
1880 PRINT "INPUT 'Q' WHEN FINISHED.":X=1:PRINT
1890 PRINT TAB(30);"DATE? ";:LINE INPUT DATE$(X)
1900 IF DATE$(X)="Q" THEN 1940
1910 DATE$(X)=LEFT$(DATE$(X)+" ",10)
1920 X=X+1
1930 GOTO 1890
1940 CLEARW 2:GOTOXY 25,1:PRINT "ALL DATA FILED UNDER DATE(S):":PRINT
1950 FOR DI=1 TO X-1
1960 PRINT TAB(35);DATE$(DI)
1970 NEXT DI
1980 PRINT:PRINT TAB(20);"WILL BE DELETED. IS THAT OK (Y OR N)? ";
1990 LINE INPUT OK$
2000 IF OK$="Y" THEN 2030
2010 IF OK$="N" THEN 1830
2020 IF OK$<>"Y" OR OK$<>"N" THEN 1940
2030 CLEARW 2:GOTOXY 31,7:PRINT "NOW UPDATING FILE"
2040 OPEN "R",#1,FILENAME$,47
2050 FIELD #1,47 AS I$
2060 OPEN "R",#2,"UPDATED.DAT",47
2070 FIELD #2,47 AS IN$
2080 FOR R=1 TO LOF(1)
2090 GET #1,R
2100 FOR DI=1 TO X-1
2110 IF LEFT$(I$,10)=DATE$(DI) THEN 2160
2120 NEXT DI
2130 LSET IN$=I$
2140 RN=RN+1
2150 PUT #2,RN
2160 NEXT R
2170 CLOSE
2180 KILL FILENAME$
2190 NAME "UPDATED.DAT" AS FILENAME$
2200 GOTO 700
2210 '
2220 '************************************************************************
2230 '* ROUTINE TO LIST ENTIRE FILE *
2240 '************************************************************************
2250 '
2260 CLEARW 2:GOTOXY 30,8:PRINT "NOW READING FILE"
2270 OPEN "R",#1,FILENAME$,47
2280 FIELD #1,10 AS D$,2 AS T$,5 AS C$,15 AS N$,5 AS A$,10 AS M$
2290 CLEARW 2:LR=LOF(1)
2300 R=1
2310 WHILE R<=LR
2320 PAGENO=PAGENO+1
2330 GOTOXY 18,1:PRINT "BOND DATA FOR FILE '";FILENAME$;"'";
2340 PRINT TAB(49);"PAGE";PAGENO
2350 PRINT TAB(4);"ISSUE DATE";TAB(18);"TYPE";TAB(26);"COST";TAB(39);"NUMBER";
2360 PRINT TAB(53);"AMOUNT";TAB(63);"MATURES ON"
2370 PRINT TAB(4);"__________";TAB(18);"____";TAB(26);"____";TAB(39);"______";
2380 PRINT TAB(53);"______";TAB(63);"__________"
2390 PRINT
2400 FOR LN=1 TO 10
2410 GET #1,R
2420 PRINT TAB(4);D$;TAB(19);T$;TAB(25);"$";C$;TAB(36);N$;
2430 PRINT TAB(54);"$";A$;TAB(63);M$
2440 R=R+1
2450 IF R>LR THEN LN=13
2460 NEXT LN
2470 PRINT:PRINT TAB(5);"PRESS <RETURN> TO CONTINUE OR ENTER 'X' ";
2480 PRINT "TO RETURN TO THE MAIN MENU ";:LINE INPUT CONTINUE$
2490 IF CONTINUE$="X" THEN R=LR+1
2500 CLEARW 2
2510 WEND
2520 CLOSE #1:PAGENO=0:GOTO 700
2530 '
2540 '************************************************************************
2550 '* ROUTINE TO LIST BOND SUMMARY *
2560 '************************************************************************
2570 '
2580 GOSUB INPUTDATE
2590 GOSUB BONDSUM
2600 CLEARW 2:GOTOXY 24,1:PRINT "SUMMARY OF FILE NAMED '";FILENAME$;"'":PRINT
2610 PRINT TAB(14);"TOTAL FACE VALUE OF YOUR SAVINGS BONDS: ";
2620 PRINT USING BVPM$;FV
2630 PRINT TAB(14);"NUMBER OF 'E' BONDS:";TAB(49);:PRINT USING BPM$;EN
2640 PRINT TAB(14);"NUMBER OF 'EE' BONDS:";TAB(49);:PRINT USING BPM$;EE
2650 PRINT TAB(14);"FACE VALUE OF 'E' BONDS:";TAB(42);:PRINT USING BVPM$;V
2660 PRINT TAB(14);"FACE VALUE OF 'EE' BONDS:";TAB(42);:PRINT USING BVPM$;EV
2670 PRINT:PRINT TAB(27);MB;"BONDS MATURE BY ";MY$
2680 PRINT TAB(18);"YOU HAVE ";:PRINT USING BVPM$;MV;
2690 PRINT " WORTH OF MATURE BONDS!!!"
2700 PRINT:PRINT TAB(26);"PRESS <RETURN> TO CONTINUE";:LINE INPUT CONTINUE$
2710 GOTO 700
2720 '
2730 '************************************************************************
2740 '* ROUTINE TO PRINT ENTIRE FILE *
2750 '************************************************************************
2760 '
2770 CLEARW 2:GOTOXY 14,6:PAGENO=0:FV=0:EN=0:EE=0:V=0:EV=0:MB=0:MV=0
2780 PRINT "TURN ON THE PRINTER. LINE UP THE FOLD IN THE PAPER"
2790 PRINT TAB(22);"WITH THE TOP OF THE PRINT HEAD GUARD."
2800 PRINT TAB(26);"PRESS <RETURN> WHEN READY ";:LINE INPUT CONTINUE$
2810 GOSUB INPUTDATE
2820 CLEARW 2:GOTOXY 30,7:PRINT "NOW PRINTING TITLES"
2830 GOSUB HEADINGS
2840 CLEARW 2:GOTOXY 31,7:PRINT "NOW PRINTING FILE"
2850 OPEN "R",#1,FILENAME$,47
2860 FIELD #1,10 AS D$,2 AS T$,5 AS C$,15 AS N$,5 AS A$,10 AS M$
2870 FOR R=1 TO LOF(1)
2880 GET #1,R
2890 LPRINT TAB(1);D$;TAB(17);T$;TAB(27);"$";C$;TAB(40);N$;TAB(59);"$";A$;
2900 LPRINT TAB(69);M$
2910 PL=PL+1
2920 IF PL=63 THEN GOSUB NEWPAGE
2930 NEXT R
2940 CLOSE #1
2950 CLEARW 2:GOTOXY 30,7:PRINT "NOW PRINTING SUMMARY
2960 FOR LF=1 TO 66-PL
2970 LPRINT
2980 NEXT LF
2990 GOSUB BONDSUM
3000 PAGENO=PAGENO+1
3010 LPRINT TAB(7);CHR$(27);"W1";CHR$(27);"E";"PRINTOUT OF FILE NAMED ";
3020 LPRINT FILENAME$:LPRINT CHR$(27);"W0";
3030 LPRINT TAB(31);"(AS OF ";MY$;")";TAB(73);"PAGE";PAGENO:LPRINT CHR$(27);"F"
3040 LPRINT CHR$(27);"-1";CHR$(27);"E";CHR$(27);"D";CHR$(33);CHR$(0);
3050 LPRINT CHR$(9);"BOND SUMMARY";CHR$(27);"-0";CHR$(27);"F";CHR$(27);"@"
3060 LPRINT:GOTO 3220
3070 '
3080 '*************************************************************************
3090 '* ROUTINE TO PRINT BOND SUMMARY *
3100 '*************************************************************************
3110 '
3120 CLEARW 2:GOTOXY 14,6
3130 PRINT "TURN ON THE PRINTER. LINE UP THE FOLD IN THE PAPER"
3140 PRINT TAB(22);"WITH THE TOP OF THE PRINT HEAD GUARD."
3150 PRINT TAB(26);"PRESS <RETURN> WHEN READY ";:LINE INPUT CONTINUE$
3160 GOSUB INPUTDATE
3170 GOSUB BONDSUM
3180 CLEARW 2:GOTOXY 30,7:PRINT "NOW PRINTING SUMMARY
3190 LPRINT TAB(6);CHR$(27);"W1";CHR$(27);"E";"SUMMARY OF FILE NAMED '";
3200 LPRINT FILENAME$;"'";CHR$(27);"W0";
3210 LPRINT TAB(31);"(AS OF ";MY$;")";CHR$(27);"F":LPRINT
3220 LPRINT TAB(23);"TOTAL FACE VALUE OF BONDS:";TAB(54);
3230 LPRINT USING BVPM$;FV
3240 LPRINT TAB(23);"NUMBER OF 'E' BONDS HELD:";TAB(61);:LPRINT USING BPM$;EN
3250 LPRINT TAB(23);"NUMBER OF 'EE' BONDS HELD:";TAB(61);:LPRINT USING BPM$;EE
3260 LPRINT TAB(23);"TOTAL VALUE OF 'E' BONDS HELD:";TAB(54);
3270 LPRINT USING BVPM$;V
3280 LPRINT TAB(23);"TOTAL VALUE OF 'EE' BONDS HELD:";TAB(54);
3290 LPRINT USING BVPM$;EV
3300 LPRINT TAB(23);"NUMBER OF MATURE BONDS:";TAB(61);:LPRINT USING BPM$;MB
3310 LPRINT TAB(23);"FACE VALUE OF MATURE BONDS:";TAB(54);
3320 LPRINT USING BVPM$;MV
3330 LPRINT CHR$(12):FV=0:EN=0:EE=0:V=0:EV=0:MB=0:MV=0
3340 GOTO 700
3350 '
3360 '*************************************************************************
3370 '* ROUTINE TO PRINT MATURE BOND LIST *
3380 '*************************************************************************
3390 '
3400 CLEARW 2:GOTOXY 14,6
3410 PRINT "TURN ON THE PRINTER. LINE UP THE FOLD IN THE PAPER"
3420 PRINT TAB(22);"WITH THE TOP OF THE PRINT HEAD GUARD."
3430 PRINT TAB(26);"PRESS <RETURN> WHEN READY ";:LINE INPUT CONTINUE$
3440 GOSUB INPUTDATE
3450 CLEARW 2:GOTOXY 30,7:PRINT "NOW PRINTING TITLES"
3460 LPRINT TAB(13);CHR$(27);"W1";CHR$(27);"E";"'";FILENAME$;
3470 LPRINT "' MATURE BOND LIST"
3480 LPRINT CHR$(27);"W0";TAB(31);"(AS OF ";MY$;")";CHR$(27);"F":LPRINT
3490 LPRINT CHR$(27);"D";CHR$(17);CHR$(31);CHR$(52);CHR$(67);CHR$(0)
3500 LPRINT CHR$(27);"-1";"DATE ISSUED";CHR$(9);"TYPE";CHR$(9);
3510 LPRINT "BOND NUMBER";CHR$(9);"AMOUNT";CHR$(9);"DATE MATURE"
3520 LPRINT CHR$(27);"-0";CHR$(27);"@"
3530 CLEARW 2:GOTOXY 32,7:PRINT "NOW READING FILE"
3540 OPEN "R",#1,FILENAME$,47
3550 FIELD #1,10 AS D$,2 AS T$,5 AS C$,15 AS N$,5 AS A$,10 AS M$
3560 CLEARW 2:GOTOXY 31,7:PRINT "NOW PRINTING LIST"
3570 FOR R=1 TO LOF(1)
3580 GET #1,R
3590 FOR D=1 TO 12
3600 READ MO$
3610 IF MO$=LEFT$(D$,3) THEN 3630
3620 NEXT D
3630 RESTORE:JD=VAL(RIGHT$(M$,4))+D/100
3640 IF JD>YM THEN 3690
3650 LPRINT TAB(2);D$;TAB(19);T$;TAB(32);N$;TAB(53);
3660 LPRINT USING "$$##";VAL(A$);
3670 LPRINT TAB(68);M$:TA=TA+VAL(A$):MB=MB+1
3680 NEXT R
3690 CLOSE #1:LPRINT:LPRINT:LPRINT
3700 LPRINT TAB(17);"TOTAL NUMBER OF MATURE BONDS:";TAB(58);
3710 LPRINT USING BPM$;MB
3720 LPRINT TAB(17);"TOTAL FACE VALUE OF MATURE BONDS:";TAB(51);
3730 LPRINT USING BVPM$;TA
3740 LPRINT CHR$(12):FV=0:EN=0:EE=0:V=0:EV=0:MB=0:MV=0
3750 GOTO 700
3760 '
3770 '************************************************************************
3780 '* ROUTINE TO USE ANOTHER FILE *
3790 '************************************************************************
3800 '
3810 CLEARW 2:GOTO 560
3820 '
3830 '************************************************************************
3840 '* ROUTINE TO END PROGRAM *
3850 '************************************************************************
3860 '
3870 GOTO 5140
3880 '
3890 '************************************************************************
3900 '* INPUTDATA SUBROUTINE *
3910 '************************************************************************
3920 '
3930 INPUTDATA:
3940 X=1
3950 CLEARW 2:GOTOXY 29,1:PRINT "INPUT BOND INFORMATION"
3960 PRINT TAB(24);"INPUT 'Q' <RETURN> WHEN FINISHED"
3970 PRINT TAB(16);"ISSUE DATE (ENTER AS 'MONTH,YEAR')? ";:LINE INPUT DATE$(X)
3980 RESTORE:IF DATE$(X)="Q" THEN 4470
3990 IF LEN(DATE$(X))<8 OR LEN(DATE$(X))>10 THEN 4040
4000 FOR MONTH=1 TO 12
4010 READ MN$
4020 IF MN$=LEFT$(DATE$(X),3) THEN 4080
4030 NEXT MONTH
4040 PRINT TAB(23);"'";DATE$(X);"' IS AN INVALID DATE!!"
4050 PRINT TAB(16);"USE AT LEAST 8 BUT NOT MORE THAN 10 CHARACTERS"
4060 PRINT TAB(16);"WHAT IS THE CORRECT DATE (ENTER AS MONTH,YEAR)? ";
4070 LINE INPUT DATE$(X):GOTO 3980
4080 PRINT TAB(28);"BOND TYPE (E OR EE)? ";:LINE INPUT TYPE$(X)
4090 IF TYPE$(X)="E" OR TYPE$(X)="EE" THEN 4140
4100 PRINT TAB(17);"'";TYPE$(X);"' IS AN INVALID BOND TYPE!!! ";
4110 PRINT "USE 'E' OR 'EE'"
4120 PRINT TAB(26);"WHAT IS THE CORRECT TYPE? ";:LINE INPUT TYPE$(X)
4130 GOTO 4090
4140 PRINT TAB(21);"ORIGINAL COST (ENTER AS $XX.XX)? $";:LINE INPUT COST$(X)
4150 IF LEN(COST$(X))<=5 AND VAL(RIGHT$(COST$(X),3))<1 THEN 4180
4160 PRINT TAB(23);"'$";COST$(X);"' IS AN INCORRECT AMOUNT!!!"
4170 PRINT TAB(24);"ENTER CORRECT AMOUNT AS '$XX.XX'":GOTO 4140
4180 PRINT TAB(21);"BOND NUMBER? ";:LINE INPUT NUMBER$(X)
4190 IF LEN(NUMBER$(X))>8 AND LEN(NUMBER$(X))<15 THEN 4260
4200 PRINT TAB(15);"'";NUMBER$(X);"' IS AN INVALID BOND SERIAL ";
4210 PRINT "NUMBER!!!"
4220 PRINT TAB(16);"THE NUMBER MUST BE BETWEEN 9 AND 15 DIGITS LONG."
4230 PRINT TAB(27);"YOU TRIED TO USE";LEN(NUMBER$(X));"DIGITS."
4240 PRINT TAB(21);"WHAT IS THE CORRECT NUMBER? ";:LINE INPUT NUMBER$(X)
4250 GOTO 4190
4260 PRINT TAB(21);"BOND AMOUNT (ENTER AS $XXX)? $";:LINE INPUT AMOUNT$(X)
4270 IF LEN(AMOUNT$(X))<=3 THEN 4310
4280 PRINT TAB(23);"'$";AMOUNT$(X);"' IS AN INCORRECT AMOUNT!!!"
4290 PRINT TAB(15);"MAXIMUM OF 3 DIGITS ALLOWED. ";
4300 PRINT "YOU TRIED TO USE";LEN(AMOUNT$(X)):GOTO 4260
4310 RESTORE:PRINT TAB(19);"DATE MATURE (ENTER AS MONTH,YEAR)? ";
4320 LINE INPUT MATURE$(X)
4330 IF LEN(MATURE$(X))<8 OR LEN(MATURE$(X))>10 THEN 4380
4340 FOR MN=1 TO 12
4350 READ MN$
4360 IF MN$=LEFT$(MATURE$(X),3) THEN 4410
4370 NEXT MN
4380 PRINT TAB(23);"'";MATURE$(X);"' IS AN INVALID DATE!!!"
4390 PRINT TAB(17);"USE AT LEAST 8 BUT NOT MORE THAN 10 CHARACTERS"
4400 GOTO 4310
4410 LI$=LEFT$(DATE$(X)+" ",10)+LEFT$(TYPE$(X)+" ",2)
4420 MI$=LI$+LEFT$(COST$(X)+" ",5)+LEFT$(NUMBER$(X)+" ",15)
4430 IN$(X)=MI$+LEFT$(AMOUNT$(X)+" ",5)+RIGHT$(" "+MATURE$(X),10)
4440 X=X+1
4450 LI$="":MI$=""
4460 GOTO 3950
4470 RETURN
4480 '
4490 '*************************************************************************
4500 '* INPUT DATE ROUTINE *
4510 '*************************************************************************
4520 '
4530 INPUTDATE:
4540 CLEARW 2:GOTOXY 10,1:PRINT "ENTER CURRENT MONTH AND YEAR ";
4550 LINE INPUT "(AS MONTH,YEAR) ";MY$
4560 IF LEN(MY$)<8 OR LEN(MY$)>10 THEN 4610
4570 FOR Z=1 TO 12
4580 READ MN$
4590 IF MN$=LEFT$(MY$,3) THEN 4620
4600 NEXT Z
4610 CLEARW 2:GOTOXY 24,1:PRINT "'";MY$;"' IS AN INVALID DATE!!!"
4620 MN=Z:RESTORE:YM=VAL(RIGHT$(MY$,4))+MN/100
4630 RETURN
4640 '
4650 '*************************************************************************
4660 '* BOND SUMMARY ROUTINE *
4670 '*************************************************************************
4680 '
4690 BONDSUM:
4700 CLEARW 2:GOTOXY 30,7:PRINT "NOW READING FILE"
4710 OPEN "R",#1,FILENAME$,47
4720 FIELD #1,10 AS D$,2 AS T$,5 AS C$,15 AS N$,5 AS A$,10 AS M$
4730 FOR R=1 TO LOF(1)
4740 GET #1,R
4750 FOR D=1 TO 12
4760 READ MO$
4770 IF MO$=LEFT$(D$,3) THEN 4790
4780 NEXT D
4790 RESTORE
4800 JD=VAL(RIGHT$(M$,4))+(D/100)
4810 FV=FV+VAL(A$)
4820 IF T$="E " THEN EN=EN+1:V=V+VAL(A$)
4830 IF T$="EE" THEN EE=EE+1:EV=EV+VAL(A$)
4840 IF JD<=YM THEN MB=MB+1:MV=MV+VAL(A$)
4850 NEXT R
4860 CLOSE #1:RETURN
4870 '
4880 '*************************************************************************
4890 '* NEWPAGE ROUTINE *
4900 '*************************************************************************
4910 '
4920 NEWPAGE:
4930 LPRINT:LPRINT:LPRINT
4940 GOSUB HEADINGS
4950 RETURN
4960 '
4970 '*************************************************************************
4980 '* HEADINGS SUBROUTINE *
4990 '*************************************************************************
5000 '
5010 HEADINGS:
5020 PAGENO=PAGENO+1
5030 LPRINT TAB(7);CHR$(27);"W1";CHR$(27);"E";"PRINTOUT OF FILE NAMED ";
5040 LPRINT FILENAME$:LPRINT CHR$(27);"W0";
5050 LPRINT TAB(31);"(AS OF ";MY$;")";TAB(73);"PAGE";PAGENO:LPRINT CHR$(27);"F"
5060 LPRINT TAB(16);"BOND";TAB(26);"ORIGINAL";TAB(59);"FACE"
5070 LPRINT CHR$(27);"D";CHR$(15);CHR$(27);CHR$(39);CHR$(58);CHR$(68);CHR$(0);
5080 LPRINT CHR$(27);"-1";"DATE ISSUED";CHR$(9);"TYPE";CHR$(9);"COST";
5090 LPRINT CHR$(9);"BOND NUMBER";CHR$(9);"VALUE";CHR$(9);"DATE MATURE"
5100 LPRINT CHR$(27);"-0";CHR$(27)"@":PL=6
5110 RETURN
5120 '
5130 '*************************************************************************
5140 END
ə